package com.apobates.forum.toro.tuple.strategy;

import org.apache.commons.lang3.tuple.Pair;
import java.util.Collection;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 *
 * @param <L> 左对象的类型
 * @param <R> 右对象的类型
 * @param <U> 右函数的参数类型
 */
@FunctionalInterface
public interface ManyPairSupplyStrategy<L,R,U> {
    /**
     * 执行入口
     * @param leftObjSetFun
     * @param rightFun
     * @param argument
     * @return
     */
    Collection<Pair<L,R>> apply(
            Supplier<Collection<L>> leftObjSetFun,
            Function<Collection<U>, Collection<R>> rightFun,
            Map<String, String> argument);
}
